/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ig.util;

import java.io.FileInputStream;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Collection;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

/**
 *
 * @author jsanchez
 */
public class GenScripMatricesCir051 {

    public static void main(String[] xls) throws Exception {
        System.out.println(GenScripMatricesCir051.loadScript("/home/Entrada/CIRCULAR 051/matricesreporjul2008.xls", 6));
    }

    public static Collection loadScript(String xls, int opcion) throws Exception {

        Collection c = new ArrayList();
        POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(xls));
        HSSFWorkbook wb = new HSSFWorkbook(fs);

        //Matriz Correlaciones ordenada
        HSSFSheet sheet = wb.getSheetAt(0);
        int decimales = GenScripMatricesCir051.getDecimales(sheet);
        int posicion = 1;
        int matriz = 3;
        int n = 21;
        /**
         * 2=MATRIZ_CORRELACION
         * 4=VOLATILIDADES
         * 8=CHOQUES
         * 6=MATRIZ_CORRELACION+VOLATILIDADES
         * 10=MATRIZ_CORRELACION+CHOQUES
         * 12=VOLATILIDADES+CHOQUES
         */
        for (int i = 3; i < n && (opcion==2 || opcion==6 || opcion==10 || opcion==14 ); i++) {
            HSSFRow row = sheet.getRow(i);
            for (int j = 4; j <= n; j++) {
                HSSFCell cell = row.getCell((short) j);
                if (cell != null) {
                    c.add("UPDATE VALORESMATRICES SET VALOR=" + GenScripMatricesCir051.aplicarFormato(cell.getNumericCellValue(), decimales) + " WHERE IDMATRIZ=" + matriz + " AND POSICION=" + (posicion++) + "");
                } else {
                    break;
                }
            }
        }
        //Matriz Volatilidades estresadas
        sheet = wb.getSheetAt(1);
        decimales = GenScripMatricesCir051.getDecimales(sheet);
        posicion = 21;
        n = 19;
        for (int i = 2; i < n && (opcion==4 || opcion==6 || opcion==12 || opcion==14 ); i++) {
            HSSFRow row = sheet.getRow(i);
            HSSFCell cell = row.getCell((short) 4);
            if (cell != null) {
                c.add("UPDATE FACTORESRIESGO SET CAMBIOESPERADO=" + GenScripMatricesCir051.aplicarFormato(cell.getNumericCellValue(), decimales) + " WHERE ID=" + (posicion++) + " AND IDMATRIZ=" + matriz + "");
            } else {
                break;
            }
        }
        /**
         * 2=MATRIZ_CORRELACION
         * 4=VOLATILIDADES
         * 8=CHOQUES
         * 6=MATRIZ_CORRELACION+VOLATILIDADES
         * 10=MATRIZ_CORRELACION+CHOQUES
         * 12=VOLATILIDADES+CHOQUES
         */
        ////      
        //Matriz de Choques
        sheet = wb.getSheetAt(2);
        decimales = GenScripMatricesCir051.getDecimales(sheet);
        int l = 0;
        int j = 0;
        int nj = 9;
        int x = 4, y = 2;
        for (int i = 38; i <= 46; i++) {
            y = 2;
            l++;
            if (l <= 3) {
                j = 16;
            } else if (l <= 6) {
                j = 25;
            } else if (l <= 9) {
                j = 34;
            }
            nj = j + 9;
            if (x == 7) {
                x = 11;
            } else if (x == 14) {
                x = 18;
            }
            HSSFRow row = sheet.getRow(x++);
            for (; j < nj && (opcion==8 || opcion==10 || opcion==12 || opcion==14 ); j++) {
                HSSFCell cell = row.getCell((short) y++);
                c.add("UPDATE CAMBIOSESPERADOS_PBS SET CAMBIOESPERADO=" + GenScripMatricesCir051.aplicarFormato(cell.getNumericCellValue(), decimales) + " WHERE IDFACTOR=" + i + " AND IDBANDA=" + j + "");
            }
        }
        return c;
    ////
    }

    private static int getDecimales(HSSFSheet sheet) {
        int decimales;
        try {
            HSSFRow row = sheet.getRow(0);
            HSSFCell cell = null;
            cell = row.getCell((short) 1);
            decimales = Double.valueOf(cell.getNumericCellValue()).intValue();
        } catch (Exception e) {
            decimales = 8;
        }
        return decimales;
    }

    private static Double aplicarFormato(Double v, int decimales) {
        String FOR = "#.";
        for (int i = 1; i <= decimales; i++) {
            FOR += "0";
        }
        java.text.DecimalFormat df2 = new java.text.DecimalFormat(FOR);
        df2.setRoundingMode(RoundingMode.HALF_UP);
        return Double.valueOf(df2.format(v).replace(",", "."));
    }
}
